package com.example.controller;

import com.example.dto.BorrowRecordDTO;
import com.example.service.BorrowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
@RequestMapping("/api/borrow")
public class BorrowController {

    @Autowired
    private BorrowService borrowService;

    /**
     * 查询所有借阅记录
     */
    @GetMapping("/search")
    public ResponseEntity<Map<String, Object>> searchBorrows(
            @RequestParam(defaultValue = "1") int page,          // 当前页码（默认第1页）
            @RequestParam(defaultValue = "10") int pageSize,     // 每页显示数量（默认10条）
            @RequestParam(required = false) String keyword       // 可选的搜索关键词
    ) {
        // 计算偏移量（数据库 LIMIT 的起始位置）
        int offset = (page - 1) * pageSize;

        // 调用 Service 层，从数据库分页查询借阅记录（带模糊搜索）
        List<BorrowRecordDTO> records = borrowService.searchBorrows(keyword, offset, pageSize);

        // 查询符合搜索条件的记录总数，用于前端分页控件显示总页数
        int total = borrowService.countBorrows(keyword);

        // 构建返回结果：包含数据列表和总数
        Map<String, Object> result = new HashMap<>();
        result.put("records", records);  // 当前页的数据
        result.put("total", total);      // 符合条件的总条数

        // 如果无数据，返回 204 No Content
        if (records == null || records.isEmpty()) {
            return ResponseEntity.noContent().build();
        }

        // 返回 200 OK，数据类型为 JSON
        return ResponseEntity
                .ok()
                .contentType(MediaType.valueOf("application/json;charset=UTF-8"))
                .body(result);
    }

    /**
     * 修改借阅记录的状态（归还/未归还）
     */
    @PutMapping("/updateStatus")
    public ResponseEntity<Map<String, Object>> updateBorrowStatus(@RequestBody BorrowRecordDTO borrowRecordDTO) {

        boolean success = borrowService.updateBorrowStatus(borrowRecordDTO.getId(), borrowRecordDTO.getReturnDate());

        Map<String, Object> result = new HashMap<>();
        result.put("success", success);
        result.put("message", success ? "状态更新成功" : "状态更新失败");

        return ResponseEntity.ok(result);
    }

    /**
     * 添加新的借阅记录（占位）
     */
    @PostMapping("/add")
    public ResponseEntity<Map<String, Object>> addBorrow(/* 你决定参数 */) {
        Map<String, Object> result = new HashMap<>();
        result.put("success", true);
        result.put("message", "借阅记录添加接口待实现");
        return ResponseEntity.ok(result);
    }
}